//#include <stdio.h>
//#include <stdlib.h>
//int c;
//int d = 100;
//int main()
//{
//    int a = 100;
//    int* b = malloc(sizeof(int));
//    
//    printf("栈区地址: %p\n", &a);
//    printf("堆区地址: %p\n", b);
//    printf("BSS 段地址: %p\n", &c);
//    printf("数据段地址: %p\n", &d);
//    printf("代码段地址: %p\n", &main);
//    free(b);
//
//    return 0;
//}

//#include <stdio.h>
//#include <stdlib.h>
//int main()
//{
//    int stack1 = 100;
//    int stack2 = 200;
//    int stack3 = 300;
//    int* heap1 = (int*)malloc(sizeof(int));
//    int* heap2 = (int*)malloc(sizeof(int));
//    int* heap3 = (int*)malloc(sizeof(int));
//    printf("栈区地址1: %p\n", &stack1);
//    printf("栈区地址2: %p\n", &stack2);
//    printf("栈区地址3: %p\n", &stack3);
//    printf("堆区地址1: %p\n", heap1);
//    printf("堆区地址2: %p\n", heap2);
//    printf("堆区地址3: %p\n", heap3);
//
//    free(heap1);
//    free(heap2);
//    free(heap3);
//
//
//    return 0;
//}

//#include <stdio.h>
//#include <unistd.h>
//#include <stdlib.h>
//int g_val = 0;
//int main()
//{
//    pid_t id = fork();
//    if(id == 0) // 子进程
//    {
//        g_val++;
//        printf("childPid = %d, val = %d, addr = %p\n", getpid(), g_val, &g_val);
//    }
//    else // 父进程
//    {
//        printf("parentPid = %d, val = %d, addr = %p\n", getpid(), g_val, &g_val);
//    }
//    sleep(1);
//    return 0;
//}

#include <stdio.h>
int g_val = 100;
const int a = 200;
int main()
{
    //printf("数据段: %p\n", &g_val);
    //printf("常量区: %p\n", &a);
    //printf("代码段: %p\n", &main);
    int* ptr = &a;
    *ptr = 100;

    return 0;
}
